package org.hard.netty.c1;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author: 王林博
 * @date: 2022年08月11日 9:33
 */
public class TestByteBuffer {

    public static void main(String[] args) {

        //FileChannel
        // 输入输出流，或者使用 RandomAccessFile
//        try (FileChannel channel = new FileInputStream("demo/data.txt").getChannel()) { // 需要创建在当前项目目录下才能读取
//            // 创建缓冲区
//            ByteBuffer byteBuffer = ByteBuffer.allocate(10);
//            // 从channel读取数据  向byteBuffer写入
//            while (true){
//
//                final int read = channel.read(byteBuffer);  // 循环读取，读到-1则是没有
//                if (read == -1){
//                    break;
//                }
//                // 打印ByteBuffer
//                byteBuffer.flip(); // 切换为读模式
//                while (byteBuffer.hasRemaining()){ // 是否有未读数据
//                    final byte b = byteBuffer.get();
//                    System.out.println((char) b);
//                }
//                byteBuffer.clear(); // 切换为写模式
//
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }

        ByteBuffer byteBuffer = ByteBuffer.allocate(10);
        byteBuffer.put(new byte[]{'a','b','c','d'});
        byteBuffer.flip();      // 读模式
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());
        byteBuffer.mark(); //给索引加标记 position = 当前下标位置
        System.out.println((char) byteBuffer.get());
        byteBuffer.reset(); // 重置到 标记位置
        System.out.println((char) byteBuffer.get());
        byteBuffer.reset();
        System.out.println((char) byteBuffer.get());
        byteBuffer.clear(); // 切换到写模式
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());

        byteBuffer.put(new byte[]{'a','b','c','d'});
        System.out.println("----------");
        byteBuffer.flip();
//        System.out.println((char) byteBuffer.get(3));
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());
        System.out.println((char) byteBuffer.get());




    }
}
